In one conventional storage arrangement, a host stores data to and retrieves the data from a redundant array of independent disks (RAID). In the RAID, stripes are distributed across multiple disks of the array. Depending upon the RAID level of the RAID, each of the stripes may include at least one data block and at least one parity block. If a catastrophic event, such as a power failure or system crash, occurs while the blocks are being written into the RAID, the resultant stripe may be placed into an inconsistent state, in which the data and parity blocks are inconsistent with each other. This may result in the data being unrecoverable after catastrophic event.
One proposed solution to this problem is to use a battery-powered volatile write cache to store stripes as they are being written. Other proposed solutions involve the use of non-volatile (e.g., flash) write caches. In the event of power failure, the partially written stripes may be recovered from the cache. Another proposed solution involves configuring the RAID in such a manner that no partial stripe writes are permitted to occur. These proposed solutions tend to be complex and/or expensive to implement and/or maintain. Additionally, these proposed solutions are implemented by the host and/or the host's operating system. This can consume significant amounts of the host's and/or operating system's processing bandwidth, and/or reduce the host's and/or operating system's performance.
Also, in this conventional arrangement, the host and/or host operating system may record recent RAID transactions in a journal. In the event of catastrophic (or other) failure of the RAID, the journal is used by the host and/or host operating system to complete or roll back incomplete transactions, and/or to other maintain the RAID's consistency and/or integrity.
In this conventional arrangement, in order to ensure the integrity and utility of the journal, journal writes are strictly ordered in relation to file system writes. For example, in this conventional arrangement, all journal entries are written before file system metadata writes, with write barriers being imposed between the journal writes and the metadata writes in order to prevent write reordering.
Such conventional journaling techniques can have significant drawbacks and disadvantages. For example, the imposition of such write barriers may reduce system throughput. It may also reduce or eliminate the ability of volatile write caching to be employed, or necessitate flushing of outstanding pending write commands. This can degrade system performance, especially in systems that employ input/output command parallelism (e.g., as is typically the case with solid state drive storage). Additionally, as was discussed previously, these proposed solutions are implemented by the host and/or the host's operating system. This can consume significant amounts of the host's and/or the host operating system's processing bandwidth, and/or reduce the host's and/or the host operating system's performance.
Although the following Detailed Description will proceed with reference being made to illustrative embodiments, many alternatives, modifications, and variations thereof will be apparent to those skilled in the art. Accordingly, it is intended that the claimed subject matter be viewed broadly.